package com.oop.this_super;

//!!!简单总结哪个对象调用，this就代表哪个对象！！！！

/*this注意事项和使用细节
1.this关键字可以用来访问本类的属性、方法、构造器
  不加this的属性采用的是就近原则，先看局部变量有没有同名的属性有就指这个，没有才指成员变量的
  加this就一定是指成员变量属性，不管局部变量有没有
2.this用于区分当前类的属性和局部变量
3.访问成员方法的语法：this.方法名（参数列表）
4.访问构造器语法：this（参数列表）；
！！注意只能在构造器中使用（只能在构造器中调用另一个构造器）！！而且this（参数列表）必须放在第一行
5.this不能在类定义的外部使用，只能在类定义的方法中使用。
 */

public class Tes_this {
    public static void main(String[] args) {
    Dog dog1 = new Dog("旺财",3);
    dog1.info();
    Dog dog2 = new Dog("旺发",2);
    dog2.info();
    Dog dog3 = new Dog("花花");
    }
}

class Dog{
    String name;
    int age;

/*  //构造器
    如果我们的 构造器的形参 可以写 属性名 就好了
    public Dog(String dname,int dage){
        name = dname;
        age = dage;
    }
    输出为旺财 3
*/

/*    public Dog(String name,int age){
        name = name;
        age = age;
    }
    输出为null 0
    因为构造器里name和age都是局部变量，而不是上面的属性，所以name = name age = age;前后两个都是一样的，
    Dog dog1 = new Dog("旺财",3);传给的是构造器里面
    而输出的的是String name; int age;没有值，所以是null 0
*/

     public Dog(String name,int age){
       this.name = name;//this 指上面的对象dog1
       this.age = age;
     }

     public Dog(String name){
       //   this = name;
     }


    public void info(){
        System.out.println(name + "\t" + age + "\t");
    }

}